package com.chenfan.magic.validator;

import com.chenfan.magic.base.R;
import com.chenfan.magic.base.S;
import com.chenfan.magic.constant.MagicConstant;
import com.chenfan.magic.entity.Isv;
import com.chenfan.magic.entity.TTLDetailModel;
import com.chenfan.magic.entity.TTLModel;
import com.chenfan.magic.utils.FastJsonKit;
import com.chenfan.magic.utils.StringKit;
import com.google.common.collect.Maps;

import java.util.Map;

/**
 * 令牌箭校验器
 *
 * @author 周夕
 * @date 2020-02-26 17:22
 */
public class TokenArrowsValidator {

    /**
     * 校验令牌箭
     *
     * @param tokenArrows
     * @param isv
     * @return
     */
    public R validate(boolean debug, String tokenArrows, Isv isv, TTLModel ttlModel) {
        TTLDetailModel tokenArrowsValidatorTTL = new TTLDetailModel();
        tokenArrowsValidatorTTL.start("TokenArrowsValidator");
        Map<String, Object> tokenArrowsMap = Maps.newHashMap();
        //1.判断是否存在令牌箭
        if (StringKit.isNotBlank(tokenArrows)) {
            String appTokenBucket = isv.getAppTokenBucket();
            if (StringKit.isBlank(appTokenBucket)) {
                return S.fail(S.MQL_VALIDATE_UNKNOW_TOKEN_ARROW_FOR_EMPTY_BUCKET);
            }
            Map<String, Object> appTokenMap = FastJsonKit.jsonstring2Map(appTokenBucket);
            String[] tokenArrowses = tokenArrows.split(MagicConstant.COMMA);
            for (String ta : tokenArrowses) {
                if (!appTokenMap.containsKey(ta)) {
                    return S.fail(S.MQL_VALIDATE_UNKNOW_TOKEN_ARROW, " => " + ta);
                }
                tokenArrowsMap.put(ta, appTokenMap.get(ta));
            }
        }

        ttlModel.getValidator().put(tokenArrowsValidatorTTL.end());
        return R.success().put(tokenArrowsMap);
    }
}
